Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

321
Vistas
¿Por qué el libro POODR sugiere "envolver los valores predeterminados en métodos"?

En POODR 2ª edición, página 125, Sandy Metz escribe

Hay dos mensajes nuevos, default_chain y default_tire_size, enviados en las líneas 6 y 7 a continuación. ... Envolver los valores predeterminados en métodos es una buena práctica en general

El código al que se refiere está debajo. Observe cómo se establece el valor predeterminado para chain y tire_size .

 class Bicycle attr_reader :size, :chain, :tire_size def initialize(**opts) @size = opts[:size] @chain = opts[:chain] || default_chain @tire_size = opts[:tire_size] || default_tire_size end def default_chain # <- common default "11-speed" end def default_tire_size # <- common default "2.1" end end

¿Por qué este enfoque es mejor que el método familiar de simplemente establecer el valor predeterminado dentro de initialize() , es decir

 def initialize(chain: "11-speed", tire_size:"2.1", **opts):

Este libro trata sobre el diseño de programación orientada a objetos, por lo que supongo que la respuesta tiene algo que ver con una buena práctica de programación orientada a objetos, pero no estoy seguro de qué.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Los métodos son más fáciles de trabajar. Puede agregarlos en las pruebas o cambiar la implementación (cargar valores desde un archivo de configuración o algo así), todo sin tocar el código que los usa.

Pero la mayor diferencia entre su código y lo que sugiere Sandi es el manejo de valores falsos.

En su código, es posible pasar nils explícitamente en lugar del valor predeterminado.

 Bicycle.new(chain: nil, tire_size: "2.1", ...)

Puede que no sea un cero codificado en su código, sino que provenga de otro lugar. Independientemente, Bicycle lo aceptará y luego puede fallar en el tiempo de ejecución cuando intente usar el valor.

Mientras que el código del libro no acepta valores nulos, sin importar si es un valor nulo predeterminado o se envía explícitamente. Si chain es falsa, se utilizará "11-speed" .

over 4 years ago · Santiago Trujillo Denunciar

0

El uso de un método modulariza el código para que las subclases puedan anular el comportamiento sin anular el inicializador:

 class MountainBike < Bicycle def default_tire_size '18' end end

Si usó argumentos posicionales initialize(chain="11-speed", tire_size="2.1", **opts) esto en realidad es una degradación importante, ya que ahora debe recordar el orden de los argumentos. Los argumentos posicionales solo deben usarse cuando hay un orden obvio en los argumentos.

En realidad, puede establecer los valores predeterminados para los argumentos posicionales y de palabras clave en la lista de argumentos con un método como este:

 class Bicycle attr_reader :size, :chain, :tire_size def initialize(tire_size: default_tire_size, chain: default_tire_size, **opts) end # ... end

Sin embargo, no se hace muy a menudo, ya que tiende a desordenar mucho la firma del método.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda